package cn.assumejson.springframework.beans.factory.config;

import cn.assumejson.springframework.beans.factory.BeansException;

/**
 * 在Bean的生产过程中提供可插拔接口
 * 该顶层接口是Bean 生命周期的最重要的支撑
 *
 * @author Mr. Li
 * @version 1.0
 * @since 1.0 2021/11/30 14:53
 */
public interface BeanPostProcessor {

    /**
     * Bean 初始化之前
     *
     * @param bean     bean
     * @param beanName beanName
     * @return
     * @throws BeansException
     */
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    /**
     * Bean 初始化后 执行
     *
     * @param bean     bean
     * @param beanName beanName
     * @return
     * @throws BeansException
     */
    default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}
